//https://leetcode.cn/problems/remove-linked-list-elements/description/
//移除链表元素
//给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
struct ListNode* removeElements(struct ListNode* head, int val) {
    if(head == NULL)
    return head;
    
    struct ListNode* pcur = head->next;
    struct ListNode* prev = head;
    while(pcur != NULL)
    {
        if(pcur->val == val)
        {
            prev->next = pcur->next;
            free(pcur);
            pcur = prev->next;
        }
        else
        {
            prev = pcur;
            pcur = pcur->next;
        }
    }

    if(head->val == val)
    {
        struct ListNode* newhead = head->next;
        free(head);
        return newhead;
    }
    else
    return head;
}